const prerender = require('prerender');

const options = {
    followRedirects: true,
    // 服务监听的端口。默认为 3000。可以通过设置 PORT 环境变量来覆盖。
    port: process.env.PORT || 3000,

    // 每个工作进程中渲染的页面数。
    // 默认为 60，但可以通过设置 PAGES_PER_WORKER 环境变量来覆盖。
    pagesPerWorker: process.env.PAGES_PER_WORKER || 60,

    // 使用的工作进程数。默认为 CPU 核心数。
    // 可以通过设置 PRERENDER_NUM_WORKERS 环境变量来覆盖。
    workers: process.env.PRERENDER_NUM_WORKERS || require('os').cpus().length,

    // 缓存中保留的页面数。默认为 1000。
    // 可以通过设置 PAGE_CACHE_MAXSIZE 环境变量来覆盖。
    pageCacheMaxSize: process.env.PAGE_CACHE_MAXSIZE || 1000,

    // 页面在缓存中保留的毫秒数。默认为 1 小时。
    // 可以通过设置 PAGE_CACHE_TTL 环境变量来覆盖。
    pageCacheTtl: process.env.PAGE_CACHE_TTL || 60 * 60 * 1000,

    // 等待页面加载的毫秒数。默认为 500 毫秒。
    // 可以通过设置 PAGE_DONE_CHECK_INTERVAL 环境变量来覆盖。
    pageDoneCheckInterval: process.env.PAGE_DONE_CHECK_INTERVAL || 600,

    // 等待页面加载的毫秒数。默认为 20 秒。
    // 可以通过设置 PAGE_LOAD_TIMEOUT 环境变量来覆盖。
    pageLoadTimeout: process.env.PAGE_LOAD_TIMEOUT || 20000,

    // 请求页面时使用的 User-Agent。
    // 默认为 Prerender.io 的 User-Agent。
    userAgent: 'Prerender (+https://github.com/prerender/prerender)',
    
    // Chrome启动参数，从环境变量获取
    chromeFlags: process.env.CHROME_FLAGS ? process.env.CHROME_FLAGS.split(',') : []
};

if (process.platform === 'win32') {
    options.chromeLocation = 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe';
}

const server = prerender(options);

// 添加插件
server.use({
    requestReceived: (req, res, next) => {
        if (req.url === '/health') {
            res.statusCode = 200;
            return res.end('OK');
        }
        next();
    }
});

if (process.env.ALLOWED_DOMAINS && process.env.ALLOWED_DOMAINS.trim()) {
    console.log('白名单模式开启');
    console.log('ALLOWED_DOMAINS', process.env.ALLOWED_DOMAINS);
    server.use(prerender.whitelist());
}
server.use(prerender.sendPrerenderHeader());
server.use(prerender.removeScriptTags());
server.use(prerender.httpHeaders());
server.use(prerender.browserForceRestart());
server.use(prerender.addMetaTags());
server.use(require('prerender-memory-cache'));

server.start(); 